// MapStorageImpl.ts
import type { IStorage } from '../types';

/** 基于 Map 实现的内存存储类，实现 IStorage 接口 适用于需要临时存储键值对的场景 */
class MapStorageImpl implements IStorage {
	/** 内部存储 Map */
	private map: Map<string, string>;

	/** 构造函数，初始化内部 Map */
	constructor() {
		this.map = new Map<string, string>();
	}

	/**
	 * 设置指定 key 的值
	 *
	 * @param key 键名，类型为 string
	 * @param value 键值，类型为 string
	 * @returns 无返回值
	 */
	setItem(key: string, value: string): void {
		this.map.set(key, value);
	}

	/**
	 * 获取指定 key 的值
	 *
	 * @param key 键名，类型为 string
	 * @returns 对应的值，若不存在则返回 null
	 */
	getItem(key: string): string | null {
		return this.map.get(key) ?? null;
	}

	/**
	 * 移除指定 key 的项
	 *
	 * @param key 键名，类型为 string
	 * @returns 无返回值
	 */
	removeItem(key: string): void {
		this.map.delete(key);
	}

	/**
	 * 清空所有存储项
	 *
	 * @returns 无返回值
	 */
	clear(): void {
		this.map.clear();
	}

	/**
	 * 检查指定 key 是否存在
	 *
	 * @param key 键名，类型为 string
	 * @returns 存在返回 true，否则返回 false
	 */
	keyExists(key: string): boolean {
		return this.map.has(key);
	}
}

export default MapStorageImpl;
